package com.ruoyi.campus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.campus.domain.UserExtend;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户扩展信息Mapper接口
 * 
 * @author campus-alarm
 * @date 2024-01-01
 */
@Mapper
public interface UserExtendMapper extends BaseMapper<UserExtend>
{
    /**
     * 查询用户扩展信息列表
     * 
     * @param userExtend 用户扩展信息
     * @return 用户扩展信息集合
     */
    List<UserExtend> selectUserExtendList(UserExtend userExtend);

    /**
     * 根据用户ID查询用户扩展信息
     * 
     * @param userId 用户ID
     * @return 用户扩展信息
     */
    UserExtend selectUserExtendByUserId(@Param("userId") Long userId);

    /**
     * 查询用户扩展信息详情（包含关联信息）
     * 
     * @param userId 用户ID
     * @return 用户扩展信息
     */
    UserExtend selectUserExtendDetail(@Param("userId") Long userId);

    /**
     * 根据微信openid查询用户
     * 
     * @param openid 微信openid
     * @return 用户扩展信息
     */
    UserExtend selectUserExtendByOpenid(@Param("openid") String openid);

    /**
     * 根据学号查询学生
     * 
     * @param schoolId 学校ID
     * @param studentNumber 学号
     * @return 用户扩展信息
     */
    UserExtend selectStudentByNumber(@Param("schoolId") Long schoolId, @Param("studentNumber") String studentNumber);

    /**
     * 根据工号查询教师
     * 
     * @param schoolId 学校ID
     * @param teacherNumber 工号
     * @return 用户扩展信息
     */
    UserExtend selectTeacherByNumber(@Param("schoolId") Long schoolId, @Param("teacherNumber") String teacherNumber);

    /**
     * 查询学校的用户列表
     * 
     * @param schoolId 学校ID
     * @param userType 用户类型（可选）
     * @return 用户扩展信息集合
     */
    List<UserExtend> selectUsersBySchool(@Param("schoolId") Long schoolId, @Param("userType") Integer userType);

    /**
     * 查询班级的学生列表
     * 
     * @param classId 班级ID
     * @return 用户扩展信息集合
     */
    List<UserExtend> selectStudentsByClass(@Param("classId") Long classId);

    /**
     * 查询已绑定微信的用户
     * 
     * @param schoolId 学校ID（可选）
     * @return 用户扩展信息集合
     */
    List<UserExtend> selectWechatBoundUsers(@Param("schoolId") Long schoolId);

    /**
     * 查询用户统计信息
     * 
     * @param schoolId 学校ID（可选）
     * @return 统计信息
     */
    UserExtend selectUserStatistics(@Param("schoolId") Long schoolId);

    /**
     * 批量更新用户学校信息
     * 
     * @param userIds 用户ID列表
     * @param schoolId 学校ID
     * @return 更新数量
     */
    int updateUserSchoolBatch(@Param("userIds") List<Long> userIds, @Param("schoolId") Long schoolId);

    /**
     * 校验学号是否唯一
     * 
     * @param schoolId 学校ID
     * @param studentNumber 学号
     * @param userId 用户ID（排除自身）
     * @return 数量
     */
    int checkStudentNumberUnique(@Param("schoolId") Long schoolId, 
                               @Param("studentNumber") String studentNumber, 
                               @Param("userId") Long userId);

    /**
     * 校验工号是否唯一
     * 
     * @param schoolId 学校ID
     * @param teacherNumber 工号
     * @param userId 用户ID（排除自身）
     * @return 数量
     */
    int checkTeacherNumberUnique(@Param("schoolId") Long schoolId, 
                               @Param("teacherNumber") String teacherNumber, 
                               @Param("userId") Long userId);

    /**
     * 校验微信openid是否唯一
     * 
     * @param openid 微信openid
     * @param userId 用户ID（排除自身）
     * @return 数量
     */
    int checkOpenidUnique(@Param("openid") String openid, @Param("userId") Long userId);
} 